<?php

namespace app\admin\controller;

use think\Db;
use think\Validate;

// 登录
class Login extends Auth
{
    // 载入页面
    public function login()
    {
        // 退出登录
        if (input('logout')) {
            $this->logout();
        }

        // 是否已经登录
        if ($this->isLogin()) {
            // 重定向到后台首页
            return redirect("/" . setAdminPath() . "/index");
        }
        // 返回视图页面
        return view("/login");
    }

    // 注销信息
    public function logout()
    {
        // 登录标识
        session(ISLOGIN, false);
        // 登录账号
        session(USERNAME, null);
        // 登录信息
        session(USERINFO, null);
        // 用户权限
        session(USERPOWER, null);
    }

    // 用户登录
    public function userlogin()
    {
        // 获取请求信息
        $request = $this->request;
        // 字段验证
        $validate = new Validate([
            'studentNo' => 'require',
            'password' => 'require',
        ], [
            'studentNo.require' => '请输入登录账号',
            'password.require' => '请输入登录密码',
        ]);

        // 参数验证
        if ($validate->check($request->PARAM())) {
            try {
                // 查询匹配数据
                $user = Db::table('v1_student')
                    ->where('student_no', $request->PARAM('studentNo'))
                    ->where('student_passwd', md5($request->PARAM('password')))
                    ->find();
                // 判断数据是否存在
                if ($user) {
                    // 登录标识
                    session(ISLOGIN, true);
                    // 登录账号
                    session(USERNAME, $request->PARAM('studentNo'));
                    // 登录信息
                    session(USERINFO, $user);
                    // 用户权限
                    session(USERPOWER, $user['student_power']);
                    // 返回成功数据
                    return json($this->initTips(200, '登录成功', setAdminPath()));
                } else {
                    // 登录标识
                    session(ISLOGIN, false);
                    // 返回登录失败信息
                    return json($this->initTips(400, '登录失败'));
                }
            } catch (\Exception $ee) {
                // 返回异常信息
                return json($this->initTips(500, '内部服务器错误'));
            }
        } else {
            // 登录标识
            session(ISLOGIN, false);
            // 参数验证不通过
            return json($this->initTips(100, $validate->getError()));
        }
    }


    // 密码密钥修改
    public function editInfo()
    {
        try {
            // 获取请求信息
            $request = $this->request;

            // 字段验证
            $validate = new Validate([
                'password_old' => 'require',
            ], [
                'password_old.require' => '请输入当前登录账号密码',
            ]);
            // 参数验证
            if ($validate->check($request->PARAM())) {
                Db::startTrans(); //开启事务
                $isshanchu  = false;
                // 是否传入新密码
                if ($request->has('password', 'post') && $request->post('password') != '') {
                    $isshanchu = true;
                    // 修改新密码
                    $data['student_passwd'] = md5(trim($request->post('password')));
                }

                // 查询用户信息
                $user = DB::table('v1_student')->where('student_no', session(USERNAME))
                    ->where('student_passwd', md5(trim($request->post('password_old'))))->find();

                // 判断用户信息是否存在
                if (!$user) {
                    return json($this->initTips(100, '账号密码不匹配'));
                }

                $data['student_token'] = $request->post('token');
                $res = DB::table('v1_student')
                    ->where('student_no', session(USERNAME))
                    ->where('student_passwd', md5(trim($request->post('password_old'))))
                    ->update($data);
                if ($res >= 0) {
                    // 事务提交
                    Db::commit();
                    // 是否修改密码
                    if ($isshanchu) {
                        // 注销
                        $this->logout();
                    }
                    return json($this->initTips(200, '保存成功'));
                } else {
                    // 事务回滚
                    Db::rollback();
                    return json($this->initTips(200, '保存失败'));
                }
            } else {
                // 参数验证不通过
                return json($this->initTips(100, $validate->getError()));
            }
        } catch (\Exception $ee) {
            // 事务回滚
            Db::rollback();
            // 返回异常信息
            return json($this->initTips(500, '内部服务器错误'));
        }
    }
}
